package com.gupao.p7store.common.utils;

/**
 * 版本比较器
 *
 * @ClassName: MapComparator
 * @Author dengbicheng
 * @Date 2021/12/15 14:03
 * @Version v 1.0
 */

import java.util.*;

public class VersionUtils implements Comparator<String> {

    /**
     *比较两个版本号大小
     * @param v1 第一个版本号
     * @param v2 第二个版本号
     * @return 小于0 v1<v2; 等于0 v1=v2; 大于0 v1>v2
     */
    @Override
    public int compare(String v1, String v2) {
        v1 = v1.replaceAll("([^(\\d|\\.)])", "");
        v2 = v2.replaceAll("([^(\\d|\\.)])", "");
        String[] v1Array = v1.split("\\.");
        String[] v2Array = v2.split("\\.");

        int idx = 0;
        int minLength = Math.min(v1Array.length, v2Array.length);
        int ret = 0;

        while (idx < minLength
            //先比较长度
            && (ret = v1Array[idx].length() - v2Array[idx].length()) == 0
            //再比较字符
            && (ret = v1Array[idx].compareTo(v2Array[idx])) == 0) {
            ++idx;
        }
        //如果已经分出大小，则直接返回，如果未分出大小，则再比较位数，有子版本的为大；
        ret = (ret != 0) ? ret : v1Array.length - v2Array.length;
        return ret;
    }
}
